<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>

  <body>
    <script>
      // promise周边方法：和promise相关的一些方法；
      // 1.创建一个成功状态的promise方法；静态方法创建Promise对象 Promise.resolve("值");
      // let p = new Promise((resolve)=>{
      //     resolve(111);
      // })
      // console.log(p);
      // let p = Promise.resolve(1111);
      // console.log(p);

      // 2.创建一个失败状态的promise对象 Promise.reject("err");
      // let p = Promise.reject("error");
      // console.log(p);

      // 3.执行快的promise结果  ：Promise.race();

      // let p1 = new Promise(resolve=>{
      //     setTimeout(() => {
      //         resolve(111);
      //     }, 1000);
      // })

      // let p2 = new Promise(resolve=>{
      //     setTimeout(() => {
      //         resolve(222);
      //     }, 2000);
      // })

      // let p3 = new Promise(resolve=>{
      //     setTimeout(() => {
      //         resolve(333);
      //     }, 3000);
      // })

      // Promise.race([p1,p2,p3]).then(res=>{
      //     console.log(res);
      // })

      // 4.获取所有promise对象的结果 Promise.all();前提是所有的promise对象都是成功状态；

      // 依次执行promise
      // let p1 = new Promise(resolve => {
      //     setTimeout(() => {
      //         resolve(111);
      //     }, 1000);
      // })
      // p1.then(res => {
      //     console.log(res);
      //     let p2 = new Promise(resolve => {
      //         setTimeout(() => {
      //             resolve(222);
      //         }, 1000);
      //     })
      //     return p2;
      // }).then(res => {
      //     console.log(res);
      //     let p3 = new Promise(resolve => {
      //         setTimeout(() => {
      //             resolve(333);
      //         }, 1000);
      //     })
      //     return p3;
      // }).then(res=>{
      //     console.log(res);
      // })

      // 一起执行；

      // let p1 = new Promise(resolve => {
      //     setTimeout(() => {
      //         resolve(111);
      //     }, 1000);
      // })

      // let p2 = new Promise((resolve,reject) => {
      //     setTimeout(() => {
      //         resolve(222);
      //         // reject("err");
      //     }, 1000);
      // })

      // let p3 = new Promise(resolve => {
      //     setTimeout(() => {
      //         resolve(333);
      //     }, 1000);
      // })

      // Promise.all([p1,p2,p3]).then(res=>{
      //     console.log(res);
      // })

      // 5.Promise.allSettled();ES2020 (es11)

      // let p1 = new Promise(resolve => {
      //     setTimeout(() => {
      //         resolve(111);
      //     }, 1000);
      // })

      // let p2 = new Promise((resolve,reject) => {
      //     setTimeout(() => {
      //         // resolve(222);
      //         reject("err");
      //     }, 1000);
      // })

      // let p3 = new Promise(resolve => {
      //     setTimeout(() => {
      //         resolve(333);
      //     }, 1000);
      // })

      // Promise.allSettled([p1,p2,p3]).then(res=>{
      //     console.log(res);
      // })

      // 6.promise捕捉错误 catch (实例方法)
      // let p = new Promise((res,rej)=>{
      //     res("success");
      //     // rej("错误");
      // })
      // // p.then(res=>{
      // //     console.log(res);
      // // },err=>{
      // //     console.log(err);
      // // })

      // // 通过catch捕捉错误，catch会捕捉链式的错误
      // // p.then(res=>{
      // //     console.log(res);
      // // }).catch(err=>{
      // //     console.log(err);
      // // })
      // p.then(res=>{
      //     console.log(res);
      //     return Promise.reject("错误");
      // }).then(res=>{
      //     console.log(res);
      // }).catch(err=>{
      //     console.log(err);
      // })

      // 7.finally ：promise执行之后执行； promise执行完毕之后执行；
      let p = new Promise((resolve, reject) => {
        setTimeout(() => {
          // resolve(1111);
          reject("error");
        }, 1000);
      });

      p.then(
        (res) => {
          console.log(1111);
        },
        (err) => {
          console.log(err);
        }
      ).finally(() => {
        console.log("执行完了");
      });

      /* 
        
        总结 ： 静态方法：Promsie.reolve  Promise.reject Pormise.race Promise.all Promise.allSellted  
               实例方法：catch  finally

               常用 ：catch Promise.all(Promise.allSettled)  Promise.race
        
        
        */
    </script>
  </body>
</html>
